//package _Banque._TUA;

//import _Banque.Banque;
//import _Banque.CompteCourant;
//import _Banque.Titulaire;
//import _Exception.BUExeption;
//import _Exception.IPException;
//import _Tests.Tests;

//
// IUT de Nice / Departement informatique / Module APO-Java
// Annee 2011_2012 - Package _Banque
//
// Classe CompteCourant V 1.1.0 - Tests d'anomalie
//
// Auteur : S.Estevane Y.Michel
//

public class T_CompteCourant_A {

	 @SuppressWarnings("unused")
	public static void main (String[] args) {

		 Tests.Begin("_Banque.OperationBancaire", "V1.1.0");

		 	Banque b = new Banque();
		 	String adresse_1= "Imm. Les Magnolias Bat. 2, 8 Bd Napoleon III - NICE (06000)";
		 	String adresse_2= "Villa Beau Sejour, 115 Av. de la Grande Armee - PARIS (75000)";

		 	Titulaire dupuy = new Titulaire("DUPUY", "melanie", "1978/04/25", adresse_1);
		 	Titulaire durand = new Titulaire("Durand", "Paul", "1981/01/03",  adresse_2);

			CompteCourant cpt= null;
			try{cpt = new CompteCourant(b, dupuy);}
			catch(Exception e) {}

		 	Tests.Design("Controle des anomalies de construction", 3); {

		 		int compteur= 0;

		         Tests.Case("Duplication d'un element neutre"); {
		         CompteCourant C1 = new CompteCourant();

		            try {
		            	CompteCourant clone = (CompteCourant)C1.clone();
		            	}
		            catch (CloneNotSupportedException e) {

		               Tests.Unit("java.lang.CloneNotSupportedException", e.toString());
		               compteur++;
		            }
		         }

		         Tests.Case("Duplication d'un element quelconque"); {

		                try {
		                	CompteCourant clone = (CompteCourant)cpt.clone();
		                	}
		                catch (CloneNotSupportedException e) {

		                   Tests.Unit("java.lang.CloneNotSupportedException", e.toString());
		                   compteur++;
		                }
		             }

		         Tests.Case("Validite premier parametre"); {

		                try {
		                	cpt.executer(null,'V', 100.0f);
		                	}
		                catch (Exception e) {

		                   Tests.Unit(new IPException(1), e); compteur++;
		                }
		             }

		         Tests.Case("Validite second parametre"); {

		                try {
		                	cpt.executer("xxx", 'O', 100.f);
		                	}
		                catch (Exception e) {
		                   Tests.Unit(new IPException(2), e); compteur++;
		                }
		             }

		         Tests.Case("Validite troisieme parametre"); {

		                try {
		                	cpt.executer("xxx",'V', -100.f);
		                	}
		                catch (Exception e) {
		                   Tests.Unit(new IPException(3), e); compteur++;
		                }
		             }

		         Tests.Case("Validite d'un retrait"); {

		                try {cpt.executer("xxx", 'V', 100.f);}
						catch(Exception e) {}

		                try {
		                	cpt.executer("xxx", 'R', 200.f);
		                	}
		                catch (Exception e) {
		                   Tests.Unit(new BUException("retrait impossible :"+
		                   							  " solde insuffisant"),
		                   			  e); compteur++;
		                }
		             }


		         Tests.Case("Validite d'un compte epargne"); {

		            try {cpt.executer("xxx", 'V', 100.f);}
					catch(Exception e) {}

		            try {cpt.cloturer();}
					catch(Exception e) {}

		            try {
		            	cpt.executer("xxx", 'V', 200.f);
		            	}
		            catch (Exception e) {
		               Tests.Unit(new BUException("Ne peut pas executer d'operation bancaire"+
		               							  " sur un compte cloture"),
		               				  e); compteur++;
		            }
		         }

		         Tests.Case("Synthese des controles d'anomalies"); {

		             Tests.Unit(7, compteur);
		          }

		 	}
		 Tests.End();
	 }

}
